package com.zjsru.plan2025.oneday;

import java.util.Arrays;

/**
 * 1299. 将每个元素替换为右侧最大元素
 *
 * @Author: cookLee
 * @Date: 2025-02-16
 */
public class ReplaceElements {

    /**
     * 主
     * \
     * 输入：arr = [17,18,5,4,6,1]
     * 输出：[18,6,6,6,1,-1]
     * 解释：
     * - 下标 0 的元素 --> 右侧最大元素是下标 1 的元素 (18)
     * - 下标 1 的元素 --> 右侧最大元素是下标 4 的元素 (6)
     * - 下标 2 的元素 --> 右侧最大元素是下标 4 的元素 (6)
     * - 下标 3 的元素 --> 右侧最大元素是下标 4 的元素 (6)
     * - 下标 4 的元素 --> 右侧最大元素是下标 5 的元素 (1)
     * - 下标 5 的元素 --> 右侧没有其他元素，替换为 -1
     * \
     * 输入：arr = [400]
     * 输出：[-1]
     * 解释：下标 0 的元素右侧没有其他元素
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        ReplaceElements replaceElements = new ReplaceElements();
        int[] arr = new int[]{17, 18, 5, 4, 6, 1};
        System.out.println(Arrays.toString(replaceElements.replaceElements2(arr)));
    }

    /**
     * 双循环暴力破解
     *
     * @param arr arr
     * @return {@link int[]}
     */
    public int[] replaceElements(int[] arr) {
        int len = arr.length;
        int[] count = new int[len];
        for (int i = 0; i < len; i++) {
            int max = -1;
            for (int j = i + 1; j < len; j++) {
                if (arr[j] > max) {
                    max = arr[j];
                }
            }
            count[i] = max;
        }
        return count;
    }

    public int[] replaceElements2(int[] arr) {
        int len = arr.length;
        //设定最后一位数字
        int tempNumber = arr[len - 1];
        //最后一位不在计算内
        for (int i = len - 2; i >= 0; i--) {
            //倒数第二个数字
            int temp = arr[i];
            //将当前数字替换为最大值,倒数第二个数的最大值即是最后一个数
            arr[i] = tempNumber;
            if (temp > tempNumber) {
                tempNumber = temp;
            }
        }
        //默认最后一位为-1
        arr[len - 1] = -1;
        return arr;
    }

}
